www.gusucode.com > vc++ 远程控制示例源程序-源码程序 > vc++ 远程控制示例源程序-源码程序\code\PeerYouC\ScreenCtrl.cpp
// ScreenCtrl.cpp : implementation file // Download by http://www.NewXing.com #include "stdafx.h" #include "peeryouc.h" #include "ScreenCtrl.h" #include "screenview.h" #include "mainfrm.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CScreenCtrl IMPLEMENT_DYNCREATE(CScreenCtrl, CFormView) CScreenCtrl::CScreenCtrl() : CFormView(CScreenCtrl::IDD) { //{{AFX_DATA_INIT(CScreenCtrl) m_ALT = FALSE; m_CTRL = FALSE; m_SHIT = FALSE; m_WIN = FALSE; m_start=false; //}}AFX_DATA_INIT } CScreenCtrl::~CScreenCtrl() { } void CScreenCtrl::DoDataExchange(CDataExchange* pDX) { CFormView::DoDataExchange(pDX); //{{AFX_DATA_MAP(CScreenCtrl) DDX_Control(pDX, IDC_STARTSTOP, m_startstop); DDX_Check(pDX, IDC_ALT, m_ALT); DDX_Check(pDX, IDC_CTRL, m_CTRL); DDX_Check(pDX, IDC_SHIT, m_SHIT); DDX_Check(pDX, IDC_WIN, m_WIN); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CScreenCtrl, CFormView) //{{AFX_MSG_MAP(CScreenCtrl) ON_BN_CLICKED(IDC_SCREEN, OnScreen) ON_BN_CLICKED(IDC_CTRL, OnCtrl) ON_BN_CLICKED(IDC_ALT, OnAlt) ON_BN_CLICKED(IDC_SHIT, OnShit) ON_BN_CLICKED(IDC_WIN, OnWin) ON_BN_CLICKED(IDC_STARTSTOP, OnStartstop) ON_BN_CLICKED(IDC_SEND, OnSend) //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CScreenCtrl diagnostics #ifdef _DEBUG void CScreenCtrl::AssertValid() const { CFormView::AssertValid(); } void CScreenCtrl::Dump(CDumpContext& dc) const { CFormView::Dump(dc); } #endif //_DEBUG ///////////////////////////////////////////////////////////////////////////// // CScreenCtrl message handlers void CScreenCtrl::OnScreen() { // TODO: Add your control notification handler code here CMainFrame *pMain=(CMainFrame*)AfxGetApp()->GetMainWnd(); ::SendMessage(pMain->GetSafeHwnd(),FULLSCREEN,0,0); } void CScreenCtrl::OnCtrl() { // TODO: Add your control notification handler code here UpdateData(); } void CScreenCtrl::OnAlt() { // TODO: Add your control notification handler code here UpdateData(); } void CScreenCtrl::OnShit() { // TODO: Add your control notification handler code here UpdateData(); } void CScreenCtrl::OnWin() { // TODO: Add your control notification handler code here UpdateData(); } void CScreenCtrl::OnStartstop() { // TODO: Add your control notification handler code here m_start=!m_start; CPeerSplitterWnd* splitter=(CPeerSplitterWnd*)GetParent(); CScreenView* sctrl=(CScreenView*)splitter->GetPane(1,0); sctrl->SetFocus(); sctrl->ifstart=m_start; m_start?m_startstop.SetWindowText("停止捕屏"):m_startstop.SetWindowText("开始捕屏"); if(m_start) { if(!(sctrl->src=new char[3*1024*1024])) return; if(!(sctrl->des=new char[3*1024*1024])) return; sctrl->hEvent=WSACreateEvent(); if(sctrl->hEvent==WSA_INVALID_EVENT) { return; } if(!PeerCreateSocket(&sctrl->s,PEER_STREAM)) { WSACloseEvent(sctrl->hEvent); return; } if(!PeerConnectSocket(sctrl->s,ADDRESS,7788)) { WSACloseEvent(sctrl->hEvent); closesocket(sctrl->s); return; } sctrl->hEvent1=WSACreateEvent(); if(sctrl->hEvent1==WSA_INVALID_EVENT) { return; } if(!PeerCreateSocket(&sctrl->s1,PEER_STREAM)) { WSACloseEvent(sctrl->hEvent1); return; } if(!PeerConnectSocket(sctrl->s1,ADDRESS,7788)) { WSACloseEvent(sctrl->hEvent1); closesocket(sctrl->s1); return; } sctrl->com.CommandID=PEER_KEYMOUSE; if(!PeerSendDataS(sctrl->s,(char*)&sctrl->com,sizeof(sctrl->com),&sctrl->retLen,sctrl->hEvent)) { WSACloseEvent(sctrl->hEvent); closesocket(sctrl->s); return; } sctrl->com1.CommandID=PEER_SCREEN_GET; if(!PeerSendDataS(sctrl->s1,(char*)&sctrl->com1,sizeof(sctrl->com1),&sctrl->retLen1,sctrl->hEvent1)) { WSACloseEvent(sctrl->hEvent1); closesocket(sctrl->s1); return; } sctrl->SetTimer( 1,1000,NULL); Message("远程屏幕操作开始!","成功"); } else { sctrl->KillTimer(1); if(sctrl->src) delete []sctrl->src; if(sctrl->des) delete []sctrl->des; sctrl->src=0; sctrl->des=0; closesocket(sctrl->s); WSACloseEvent(sctrl->hEvent); closesocket(sctrl->s1); WSACloseEvent(sctrl->hEvent1); Message("远程屏幕操作结束!","成功"); } } void CScreenCtrl::OnSend() { // TODO: Add your control notification handler code here if(m_start) { KEYMOUSE keymouse; CPeerSplitterWnd* splitter=(CPeerSplitterWnd*)GetParent(); CScreenView* sctrl=(CScreenView*)splitter->GetPane(1,0); if(m_ALT) keymouse.style=PEER_KEY_DOWN; else keymouse.style=PEER_KEY_UP; keymouse.nkey=VK_MENU; PeerSendDataS(sctrl->s,(char*)&keymouse,sizeof(keymouse),&sctrl->retLen, sctrl->hEvent); if(m_CTRL) keymouse.style=PEER_KEY_DOWN; else keymouse.style=PEER_KEY_UP; keymouse.nkey=VK_CONTROL; PeerSendDataS(sctrl->s,(char*)&keymouse,sizeof(keymouse),&sctrl->retLen, sctrl->hEvent); if(m_SHIT) keymouse.style=PEER_KEY_DOWN; else keymouse.style=PEER_KEY_UP; keymouse.nkey=VK_SHIFT; PeerSendDataS(sctrl->s,(char*)&keymouse,sizeof(keymouse),&sctrl->retLen, sctrl->hEvent); if(m_WIN) keymouse.style=PEER_KEY_DOWN; else keymouse.style=PEER_KEY_UP; keymouse.nkey=VK_LWIN; PeerSendDataS(sctrl->s,(char*)&keymouse,sizeof(keymouse),&sctrl->retLen, sctrl->hEvent); } }